C++/wxWidgets/Einrichten von Code::Blocks
Einrichten von Code::Blocks für wxWidgets Code::Blocks ist eine freie Entwicklungsumgebung, welche u. a. den MingW-Compiler zum Erstellen ausführbarer Anwendungen verwendet. Code::Blocks kann unter http://www.codeblocks.org/ herunter geladen werden. Einrichten des neuesten MingW-Compilers thumb|Toolchain-Einstellungen Nachdem Code::Blocks herunter geladen und installiert wurde, wird empfohlen, sich die neuesten MingW-Compiler unter http://www.mingw.org/ herunter zu laden und in ein Verzeichnis außerhalb des Code::Blocks-Verzeichnisses zu installieren. Wenn dies geschehen ist, so öffnet man Code::Blocks und wählt im Hauptmenü den Eintrag "Settings" -> "Compiler". Im darauf erscheinenden Dialog wählt man den Tab "Toolchain executables". Hier kann man zuerst auf die Taste "Auto-detect" klicken, welche aber nur funktioniert, wenn eine PATH-Variable im System für MingW hinterlegt wurde (siehe: Setzen der Umgebungsvariable). Ist dies nicht der Fall, so klickt man auf die Taste mit den drei Punkten (links neben der Taste "Auto-detect") und wählt das Verzeichnis von MingW manuell. Fehlerbehebung im Wizard-Script thumb|FehlermeldungenDer Wizard, welche das Erstellen von Projekten, welche wxWidgets verwenden, ist für die aktuelle Version 3.1.1 von wxWidgets nicht mehr aktuell. Verwendet man den aktuellen Wizard, so erhält man bei der Verwendung der statisch erstellten Bibliotheken von wxWidgets mehrere Fehlermeldungen über fehlende Referenzen zu verwendeten Funktionen. Das liegt daran, dass der Wizard die statischen Bibliotheken "libuxtheme.a" und "liboleacc.a" nicht zur Liste der zu verlinkenden Bibliotheken des neu erstellten Projekts hinzufügt. Das kann korrigiert werden, indem man den Wizard-Script um diese zwei Positionen erweitert. Alternativ kann man auch die fehlenden Bibliotheken manuell zu jedem neuen Projekt hinzufügen, was aber umständlich ist. thumb|Das Popup zum EditierenZuerst wählt man im Hauptmenü von Code::Blocks "File" -> "New" -> "Project". Im sich darauf öffnenden Dialog für ein neues Projekt wählt man unter "Projects" den Eintrag "wxWidgets Project" mit einem Rechtsklick aus und wählt im sich darauf öffnenden Popup-Menü den Eintrag "Edit this script". Daraufhin öffnet sich der Wizard-Script im Editor und es erscheint eine Meldung, welche uns mitteilt, das die Datei "wizard.script" nicht mehr länger verfügbar ist, da sie wahrscheinlich gelöscht wurde. Betrachtet man die Richtung der Schrägstriche in der Pfadangabe zu dem besagten Script, so merkt man, dass dies ebenfalls ein Bug im Projekt des Wizards ist. Man schliesst diesen Dialog mit einem Linksklick auf die Taste "Ja" bzw. "Yes". Da sich der Bug, wie oben beschrieben, um die Einbindung der statischen Bibliothek von wxWizards handelt, benötigen wir die Stelle, an welcher der Wizard die Einbindung der statischen Bibliotheken in das neue Projekt veranlasst. Dieser findet sich im Script bei Zeile 738: if (!IsDLL) { project.AddLinkLib(LibPrefix + _T("kernel32") + LibSuffix); project.AddLinkLib(LibPrefix + _T("user32") + LibSuffix); project.AddLinkLib(LibPrefix + _T("gdi32") + LibSuffix); project.AddLinkLib(LibPrefix + _T("winspool") + LibSuffix); project.AddLinkLib(LibPrefix + _T("comdlg32") + LibSuffix); project.AddLinkLib(LibPrefix + _T("advapi32") + LibSuffix); project.AddLinkLib(LibPrefix + _T("gdi32") + LibSuffix); project.AddLinkLib(LibPrefix + _T("shell32") + LibSuffix); project.AddLinkLib(LibPrefix + _T("ole32") + LibSuffix); project.AddLinkLib(LibPrefix + _T("oleaut32") + LibSuffix); project.AddLinkLib(LibPrefix + _T("uuid") + LibSuffix); project.AddLinkLib(LibPrefix + _T("comctl32") + LibSuffix); project.AddLinkLib(LibPrefix + _T("wsock32") + LibSuffix); project.AddLinkLib(LibPrefix + _T("odbc32") + LibSuffix); Da hier die benötigten Bibliotheken "libuxtheme.a" und "liboleacc.a" in der Auflistung fehlen, fügen wir folgenden Code direkt unterhalb an: project.AddLinkLib(LibPrefix + _T("uxtheme") + LibSuffix); project.AddLinkLib(LibPrefix + _T("oleacc") + LibSuffix); Es gilt hier zu beachten, dass die Dateinamenserweiterung ".a" nicht mit eingetragen werden darf, da dies bereits durch das Anhängen der Variable + LibSuffix geschieht, welcher die Dateinamenserweiterung gespeichert hat. Auch das Prefix "lib" darf nicht vorangestellt werden, da dies durch das Voranstellen der Variable LibPrefix + erledigt wird. Nun kann man den Wizard-Script abspeichern und mit dem Projektwizard neue Projekte mit wxWidgets erstellen, ohne dass man bei der Verwendung statischer Bibliotheken Fehlermeldungen bekommt. Verwenden des Wizards Nachdem der Wizard wie oben beschrieben gebugfixt wurde, kann dieser für die Erstellung neuer Projekte verwendet werden, vorausgesetzt, wxWidgets wurde für die entsprechende Version ebenfalls erstellt. Weitere Informationen findet man unter: Erstellen aus dem Sourcecode mit MingW-Make. Folgende Schritte beschreiben das Verwenden des wxWidgets-Wizards in Code::Blocks. Aufrufen des Wizards thumb|Der wxWidgets-WizardNachdem man Code::Blocks geöffnet hat, wählt man im Hauptmenü "File" -> "New" -> "Project". Im darauffolgenden Dialog wählt man links den Eintrag "Projects" und scrollt rechts ganz runter, bis man den Eintrag "wxWidgets Project" sieht. Auf diesen führt man einen Doppelklick mit der linken Maustaste aus. Darauf hin öffnet sich ein weiterer Dialog, welcher von uns Wissen will, welche Version von wxWidgets im neuen Projekt verwendet werden soll. Diese Versionsnummer muss mit der heruntergeladenen und erstellten Version von wxWidgets übereinstimmen. Nach einem Klick auf die Taste "Next" erscheint ein weiterer Dialog, in welchem festgelegt werden soll, wie das Projekt heisst und wo es gespeichert werden soll. Normalerweise reicht die Eingabe des Projekttitels und das Festlegen des Speicherorts. Weitere Änderungen sind hier normalerweise nicht von nöten. Klickt man nun erneut auf die Taste "Next", so erscheint ein Dialog, welcher die Möglichkeit bietet, die Daten des Authors der neuen Software einzugeben. Die Felder kann man alternativ auch leer lassen. wxSmith oder wxFormbuilder? Dialog oder Frame? thumb|Der wxWidgets-WizardNachdem die Taste "Next" geklickt wurde, will der nächste Dialog von uns wissen, welchen Form-Builder (also zum Erstellen der Fenster) verwendet werden soll. Hier kann man wählen zwischen wxSmith und wxFormBuilder wählen. wxSmith ist bereits Bestandteil von Code::Blocks und ist recht einfach zu verwenden. wxFormBuilder ist ebenfalls recht einfach zu verwenden, aber nicht so umfangreich wie wxSmith und auch nicht so ausgereift. Falls man den wxFormBuilder ausgewählt hat, so wird eine Projektdatei (*.fbp) für diesen mit ein das Projekt eingefügt. Im Falle von wxSmith hat die hinzugefügte Projektdatei die Endung *.wxs. Weiterhin muss festgelegt werden, ob die Anwendung einen Dialog darstellt oder einen Frame. Der Unterschied wird u. a. hier dargestellt: wxFaq. Wo ist wxWidgets? thumb|Speicherort von wxWidgets angebenNach einem Klick auf "Next" will der Wizard wissen, wo sich der wxWidgets-Ordner auf dem Computer befindet. Hierzu kann man 2 Möglichkeiten verwenden: #'Angabe des direkten Pfads': Man klickt auf die Taste mit den 3 Punkten und gibt den Pfad zum wxWidgets-Ordner direkt an. Alternativ kann man den Pfad auch eintippen oder per Copy&Paste einfügen. #'Angabe anhand einer Systemvariable': Wenn, wie unter Setzen der Umgebungsvariablen beschrieben, der Pfad zum wxWidgets-Ordner im System gespeichert ist, so kann man den Namen der Systemvariable durch ein Dollarzeichen gefolgt von Klammern, welche den Namen der Systemvariable beeinhalten, angeben. Lautet er WXWIN, so gibt man "$(WXWIN)" (ohne Anführungszeichen) in das Textfeld ein. Debug und/oder Release? thumb|ProjekteinstellungenIm darauf folgenden Dialog geht es darum, die Debug- und Release-Configuration festzulegen. Weiterhin wird der zu verwendende Compiler festgelegt. Falls der MingW-Compiler verwendet wird, so sollte der Eintrag "GNU GCC Compiler" ausgewählt worden sein, da dieser Bestand der MingW-Compiler-Suite ist. Wenn man eine Debug-Konfiguration verwenden will, so gilt zu beachten, dass wxWidgets zuvor auch mit dem Parameter BUILD=debug erstellt werden musste, da dies sonst zu Fehlern beim Erstellungsprozess der neuen Anwendung führt. (siehe Abschnitt Kompilieren mit dem Build-Script). Gleiches gilt für die Release-Konfiguration, bei welcher wxWidgets zuvor mit dem Parameter BUILD=release erstellt werden musste, um in dieser Konfiguration erfolgreich eingebunden zu werden. Mit anderen Worten: es funktioniert nur die Konfiguration, für welche wxWidgets auch erstellt wurde. Wie wird wxWidgets angesprochen? thumbBei diesem Dialog geht es maßgeblich darum, mit welchen Parametern wxWidgets erstellt wurde und mit welchen Parametern die neue Anwendung wxWidgets aufrufen kann. Die Checkboxen haben folgende Bedeutung: *"Use wxWidgetsDLL": Es wird wxWidgets in einer bzw. für jedes Module eine DLL verwendet. Dieser Parameter entspricht SHARED=1 im Buildscript von wxWidgets (siehe Abschnitt Kompilieren mit dem Build-Script). Ist diese Auswahl nicht aktiviert, so wurde wxWidgets als eine bzw. mehrere statische Bibliothek(en) erstellt, was dem Parameter SHARED=0 entspricht. *"wxWidgets is built as monolithic library": Ist diese Auswahl aktiviert, so wurde wxWidgets als eine einzige dynamische Bibliothek (*.dll) bzw als eine große statische Bibliothek (*.a) erstellt, was dem Parameter MONOLITHIC=1 des Buildscripts entspricht. Ist diese Auswahl nicht aktiviert, so handelt es sich um mehrere dynamische Bibliotheken bzw. mehrere statische Bibliotheken, was dem Parameter MONOLITHIC=0 entspricht. *"enable Unicode": Ist diese Auswahl aktiviert, so erfolgt die Zeichenverarbeitung im Unicode-Modus, was dem Parameter UNICODE=1 entspricht. Andernfalls erfolgt die Zeichenverarbeitung im ANSI-Modus, was dem Parameter UNICODE=0 entspricht. Die Option "Create Empty Project" kann gewählt werden, wenn man vorhandene Quellcodedateien ins Projekt einfügen will oder diese selbst manuell erstellen will. Der Parameter "Create and use precompiled Header" gibt uns die Möglichkeit, eine vorkompilierte Headerdatei zu spezifizieren, was bei größeren Projekten durchaus sinnvoll ist. Man kann die Option "Configure Advanced Options" aktivieren, wenn man festlegen will, welche Konfiguration als Konsole oder als Windows-Anwendung erstellt werden soll. Weiterhin kann der Paramter _WXDEBUG aktiviert werden, was das erweiterte Debugging von wxWidgets-Anwendungen ermöglicht. Kategorie:C++ Kategorie:WxWidgets